/**
 * Generali Solutions d'assurances - Tous droits réservés &copy; 2007 - 2010
 */
package fr.generali.accueilclient.client.assembler.output.p41;

import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;

import fr.generali.accueilclient.client.om.IClientProfessionnel;
import fr.generali.accueilclient.client.om.ISphereProfessionnelle;
import fr.generali.accueilclient.client.om.impl.ClientProfessionnel;
import fr.generali.accueilclient.client.om.impl.SphereProfessionnelle;
import fr.generali.refservcommuns.rce.consultpersonnesimple.dossierpersonnesimple.DtoDossierP41;
import fr.generali.refservcommuns.rce.consultpersonnesimple.dossierpersonnesimple.DtoDossierSphereProfessionnelle;
import fr.generali.refservcommuns.clients.prima.DatedMonetaryQuantityRangeValue;

/**
 * Transforme un {@link DtoDossierP41} en {@link IClientProfessionnel}
 * 
 * @author selrhazala
 */
@Component("dtoDossierP41ToClientProfessionnelConverter")
public class DtoDossierP41ToClientProfessionnelConverter implements Converter<DtoDossierP41, IClientProfessionnel> {

    /**
     * LOGGER
     */
    private static final Logger LOGGER = LoggerFactory.getLogger(DtoDossierP41ToClientProfessionnelConverter.class);

    /**
     * {@inheritDoc}
     */
    public IClientProfessionnel convert(DtoDossierP41 input) {
        LOGGER.debug("assemble");
        IClientProfessionnel client = new ClientProfessionnel();
        ISphereProfessionnelle spherePro = new SphereProfessionnelle();
        client.setSphereProfessionnelle(spherePro);

        if (input.getPersonnePhysique().getCategorieSocioProfessionnelle() != null) {
            client.setStatutProfessionnel1(input.getPersonnePhysique().getCategorieSocioProfessionnelle()
                            .getCodePCS());
        }
        List<DtoDossierSphereProfessionnelle> sphereProfessionnelleListe = input.getDossierSphereProfessionnelle();
        if (sphereProfessionnelleListe != null && !sphereProfessionnelleListe.isEmpty()) {
            DtoDossierSphereProfessionnelle dossierSphereProfessionnelle = sphereProfessionnelleListe.get(0);

            spherePro.setCodeApe(dossierSphereProfessionnelle.getSphereProfessionnelle().getCodeNAF());
            if (dossierSphereProfessionnelle.getSphereProfessionnelle().getEntreprise() != null) {
                spherePro.setSiren(dossierSphereProfessionnelle.getSphereProfessionnelle().getEntreprise()
                                .getCodeSIREN());
                spherePro.setCodeNic(dossierSphereProfessionnelle.getSphereProfessionnelle().getEntreprise()
                                .getCodeNIC());
            }
            if (dossierSphereProfessionnelle.getSphereProfessionnelle().getDateEtablissement() != null) {
                spherePro.setDateCreationEntreprise(dossierSphereProfessionnelle.getSphereProfessionnelle()
                                .getDateEtablissement().toGregorianCalendar().getTime());
            }
            if (dossierSphereProfessionnelle.getSphereProfessionnelle().getResultatFinancier() != null
                            && !dossierSphereProfessionnelle.getSphereProfessionnelle().getResultatFinancier()
                                            .isEmpty()) {
                DatedMonetaryQuantityRangeValue chiffreAffaireBorne =
                                dossierSphereProfessionnelle.getSphereProfessionnelle().getResultatFinancier().get(0)
                                                .getChiffreAffaireBorne();
                if (chiffreAffaireBorne != null) {
                    spherePro.setNiveauCA(chiffreAffaireBorne.getCodeIndicateurSaisie());
                }
            }
            if (dossierSphereProfessionnelle.getSphereProfessionnelle().getResultatFinancierAExport() != null 
                            && !dossierSphereProfessionnelle.getSphereProfessionnelle().getResultatFinancierAExport()
                                            .isEmpty()) {
                DatedMonetaryQuantityRangeValue chiffreAffaireBorneAExport =
                                dossierSphereProfessionnelle.getSphereProfessionnelle().getResultatFinancierAExport()
                                                .get(0).getChiffreAffaireAExportBorne();
                if (chiffreAffaireBorneAExport != null) {
                    spherePro.setPartCAExport(chiffreAffaireBorneAExport.getCodeIndicateurSaisie());
                }
            }
        }

        if (input.getPersonnePhysique().getCompteEspaceClient() != null
                        && input.getPersonnePhysique().getCompteEspaceClient().length() > 0) {
            client.setCompteEspaceClient(input.getPersonnePhysique().getCompteEspaceClient());
        }

        return client;
    }
}
